package net.lzzy.practices.services;

import net.lzzy.practices.entities.User;

import java.util.List;
import java.util.UUID;

/**
 * @author admin
 */
public interface UserService {
    /**
     *  登录时检查用户名密码是否正确
     * @param userName 要检查用户名
     * @param password 对应密码
     * @return 检查正确则返回User对象，否则返回null
     */
    User check(String userName, String password);
    /**
     * 根据用户名获取salt
     * @param userName 要获取salt的用户名
     * @return salt
     */
    String getSalt(String userName);
    /**
     * 注册新用户
     * @param user 前端传入的User对象
     * @return 注册成功返回注册User对象，否则返回null
     */
    User register(User user);
    /**
     * 检查用户名是否被占用
     * @param userName 要检查的用户名
     * @return 用户名被占用返回true，否则返回false
     */
    Boolean isUserNameOccupied(String userName);

    /**
     * 获取所有用户
     * @return 用户集合
     */
    List<User> get();
    /**
     * 分页获取所有用户
     * @param page 页码
     * @param size 每页数据大小
     * @return 用户集合
     */
    List<User> get(int page,int size);
    /**
     * 统计用户总数
     * @return 用户总数
     */
    Integer count();

    /**
     * 根据关键词搜索用户
     * @param kw 查询关键词
     * @return  符合条件的用户集合
     */

    List<User> search( String kw);

    /**
     * 根据申请状态获取用户
     * @param applying true表示申请教师的用户
     * @return 符合条件的用户集合
     */
    List<User> getByApplyTeacher(boolean applying);
    /**
     * 审批通过教师资格
     * @param id 要审批的用户id
     * @return 审批成功返回User对象，否则返回null
     */
    User approveTeacher(UUID id);
    /**
     * 审批不通过
     * @param id 审批不通过的用户id
     * @return 审批成功返回User对象，否则返回null
     */
    User declineTeacher(UUID id);
    /**
     * 禁止该用户登录
     * @param id 要禁止的用户id
     * @return 禁止成功返回User对象，否则返回null
     */
    User banUser(UUID id);
    /**
     * 根据id获取用户
     * @param id 要获取的用户id
     * @return 获取成功返回User对象，否则返回null
     */
    User getById(UUID id);

}
